<?php

 /**
  * ---------------------------------------------------------------
  * JEFATURA CONTROLADOR
  * ---------------------------------------------------------------
  * 
  * Esta es la clase Controlador Jefatura, contiene la invocación a todas las vistas 
  * para realizar las funciones ligadas con la planificación de cursos, cursos ofertados,
  * control de alumnos, control de profesores, control de usuarios.
  * 
  * NO SE UTILIZAN MODELS, ESA FUNCIÓN LA REALIZA LA API
  * 
  * @author Sergio Morlán Páramo
  */
 class Jefatura extends CI_Controller {



     /**
      * ---------------------------------------------------------------
      * CONSTRUCTOR
      * ---------------------------------------------------------------
      * Este es el constructor, el cual incluye la libreria url que es indispensable 
      * en todos los objetos Jefatura :]
      */
     public function __construct() {
         parent::__construct();
         $this->load->helper("url");
         $this->load->library("session");
     }




     /**
      * ---------------------------------------------------------------
      * PANTALLA
      * ---------------------------------------------------------------
      * Para el index donde se podrá visualizar un menú en el cual el usuario encontrará 
      * funciones básicas relacionadas con el usuario :]
      * @link base_url()/index.php/jefatura
      */
     public function index() {
         $this->load->library("utils/fecha");

         $data = array(
                   "titulo" => "Sistema de Inscripción del Centro de Cómputo [Administración]",
                   "fecha" => $this->fecha->getFecha(),
                   "contenido" => "jefatura/jefatura_bienvenida"
         );

         if ($this->get_log()) {
             $data["menu"] = "menu_jefatura";
             $data["usuario"] = $this->info_usuario($this->session->userdata("J_USUARIO"), "usuario");
             $data["contenido"] = "jefatura/jefatura_bienvenida";
         } else {
             $data["menu"] = "menu_centrodecomputo";
             $data["contenido"] = "jefatura/jefatura_inicio";
         }
         $this->load->view("plantilla/plantilla_unam", $data);

     }




     /**
      * ---------------------------------------------------------------
      * INTERCAMBIO (BUSINESS)
      * ---------------------------------------------------------------
      * Vamos a intentar iniciar sesion siendo un alumno, primero validaremos que su "número" (clave) de usuario exista, 
      * si no exite lo notificará, y si el usuario existe viene la validación de su contraseña, si su contraseña fue incorrecta,
      * la volverá a solicitar pero ya no solicitará el usuario. Si ambos campos son correctos, permitirá al usuario iniciar su
      * sesión :]
      * @link base_url()/index.php/jefatura/intentar_iniciar_sesion 
      */
     public function intentar_iniciar_sesion() {

         if (!$_POST || $this->get_log()) {
             redirect(site_url("jefatura"));
         }

         $this->load->library("api/usuario_class");
         $this->load->library("form_validation");

         $usuario = new Usuario_class();

         if ($this->form_validation->valid_email($_POST["usuario_usuario"]))
             $id_usuario = $usuario->log_for_email(mysql_real_escape_string ($_POST["usuario_usuario"]));
         else
             $id_usuario = $usuario->log_for_ID(mysql_real_escape_string ($_POST["usuario_usuario"]));

         if ($id_usuario) {
             if ($usuario->clave() == mysql_real_escape_string ($_POST["usuario_clave"])) {
                 $this->set_log($usuario->id());
                 redirect(site_url("jefatura"));
             } else {
                 $this->session->set_userdata("J_INTENTOS", $this->session->userdata("J_INTENTOS") + 1);
                 redirect(site_url("jefatura/iniciar_sesion"));
             }
         } else {
             $this->session->set_userdata("J_INTENTOS", $this->session->userdata("J_INTENTOS") + 1);
             redirect(site_url("jefatura/iniciar_sesion"));
         }

     }




     /**
      * ---------------------------------------------------------------
      * PANTALLA
      * ---------------------------------------------------------------
      * Muestra el inicio de sesión generlal, (No es la pantalla de bienvenida)En caso de que intente "iniciar sesión"
      * y su usuario sea correcto pero su contraseña no, decetará el nombre de usuario mostrandolo y sólo tendrá que colocar su contraseña,  
      * @link base_url()/index.php/jefatura/intentar_iniciar_sesion 
      */
     public function iniciar_sesion() {

         $this->load->library("utils/fecha");
         if (!$this->session->userdata("J_INTENTOS")) {
             $contenido = "iniciar_sesion";
         } else {
             if ($this->session->userdata("J_INTENTOS") >= 1) {
                 $contenido = "datos_incorrectos";
             }
             if ($this->session->userdata("J_INTENTOS") >= 3) {
                 $this->session->unset_userdata("J_INTENTOS");
                 $contenido = "intentos";
             }
         }
         $data = array(
                   "titulo" => "Iniciar Sesión",
                   "fecha" => $this->fecha->getFecha(),
                   "menu" => "menu_centrodecomputo",
                   "contenido" => "jefatura/iniciar_sesion/" . $contenido
         );
         $this->load->view("plantilla/plantilla_unam", $data);

     }




     /**
      * ---------------------------------------------------------------
      * INTERCAMBIO (BUSINESS)
      * ---------------------------------------------------------------
      * Vamos a intentar abandonar sesion siendo un administrador, 
      * @link base_url()/index.php/jefatura/intentar_abandonar_sesion 
      */
     public function intentar_abandonar_sesion() {
         if ($this->get_log()) {
             $this->session->unset_userdata("J_USER");
             $this->session->unset_userdata("J_INTENTOS");
             $this->session->unset_userdata("J_SESION");
             redirect(base_url() . "index.php/jefatura");
         } else {
             redirect(base_url() . "index.php/jefatura");
         }

     }




     /**
      * ---------------------------------------------------------------
      * PRIVATE
      * ---------------------------------------------------------------
      * Vamos a verificar que el usuario realmente haya iniciado sesión ;]
      * @access private
      * @return boolean 
      */
     private function get_log() {
         if ($this->session->userdata("J_SESION"))
             return TRUE;

     }




     /**
      * ---------------------------------------------------------------
      * PRIVATE
      * ---------------------------------------------------------------
      * Vamos a colocar las varibales de sesion necesarias para ingresar al sistema ;]
      * @param Int $id_usuario Id Usuario
      */
     private function set_log($id_usuario) {
         $this->session->set_userdata("J_SESION", TRUE);
         $this->session->set_userdata("J_USUARIO", $id_usuario);

     }




     /**
      * ---------------------------------------------------------------
      * PRIVATE
      * ---------------------------------------------------------------
      * Vamos a hacer un binding del usuario indicado.
      * @access private 
      * @param Int $id_usuario Id usuario.
      * @param Mixed $attr Atributos deseados
      * @return Usuario_class 
      */
     private function info_usuario($id_usuario, $attr=FALSE) {
         $this->load->library("api/usuario_class");
         $usuario = new Usuario_class($id_usuario, $attr);
         return $usuario;

     }




     /**
      * 
      * 
      * ---------------------------------------------------------------
      * 
      * --------------------------USUARIO------------------------------
      * 
      * ---------------------------------------------------------------
      * 
      * 
      * 
      */



     /**
      * M�todo que muestra el formulario de registro de usuarios
      * @author	Jonathan Ruiz
      * @link	http://localhost/siacomm/index.php/usuario/registro
      */
     public function registrar_usuario() {
         $this->load->library("utils/fecha");
         $data = array(
                   "titulo" => "Registro de usuarios",
                   "fecha" => $this->fecha->getFecha(),
                   "menu" => "menu_inicio",
                   "controlador_cliente" => "usuario_registro",
                   "main_content" => "forms/usuario_registro"
         );

         //$this->load->view("template_general", $data);

         $data = array(
                   "titulo" => "Registro de usuarios",
                   "fecha" => $this->fecha->getFecha(),
                   "menu" => "menu_centrodecomputo",
                   "controlador_cliente" => "usuario_registro",
                   "contenido" => "jefatura/usuarios/usuario_registrar"
         );
         $this->load->view("plantilla/plantilla_unam", $data);

     }




     /**
      * Método que guarda un usuario
      * @author	Jonathan Ruiz
      * @link	http://localhost/siacomm/index.php/usuario/guardar
      */
     public function guardar_usuario() {
         error_reporting(E_ALL);

         $resultado = $this->validar_usuario();

         if (!$resultado["codigo"]) {
             $this->load->database();
             $this->load->model("Model_usuario");
             $this->Model_usuario->insert_entry();
             $this->db->close();
         }
         $this->registro();

     }




     /**
      * Método que valida los datos de registro
      * @author	Jonathan Ruiz
      */
     private function validar_usuario() {
         $resultado = array(
                   "codigo" => "0",
                   "mensaje" => "Usuario agregado con �xito"
         );

         //Validando cada uno de los campos del formulario
         $this->form_validation->set_rules("user", "user", "required|trim|xss_clean");
         $this->form_validation->set_rules("pwd", "pwd", "required|trim|xss_clean|min_length[6]");
         $this->form_validation->set_rules("email", "mail", "required|valid_email|trim|xss_clean");
         $this->form_validation->set_rules("telefono", "telefono", "numeric|integer|xss_clean");
         $this->form_validation->set_rules("perfil", "perfil", "required|trim|xss_clean");

         //Definiendo los mensajes de error personalizados
         $this->form_validation->set_message("required", "Debe introducir el campo %s");
         $this->form_validation->set_message("min_length", "El campo %s debe ser de por lo menos %s caracteres");
         $this->form_validation->set_message("valid_email", "Debe escribir un formato de correo v&aacute;lido");
         $this->form_validation->set_message("numeric", "Debe introducir solo numeros en el campo %s");
         $this->form_validation->set_message("integer", "Debe introducir solo numeros en el campo %s");

         //verificando errores obtenidos por form_validation
         if ($this->form_validation->run() == FALSE) {
             $resultado["codigo"] = "07001";
             $resultado["mensaje"] = "A ocurrido un erro con alguno de los campos del formulario";

             return $resultado;
         }
         return $resultado;

         //Validando checkbox que agregan permisos

     }




     /**
      * 
      * 
      * 
      * 
      */



     /**
      * ---------------------------------------------------------------
      * INTERCAMBIO (BUSINESS)
      * ---------------------------------------------------------------
      * Vamos a generar el codigo por si el alumno en el momento del registro no tiene imaginación para crear uno
      * este metodo es invocado mediante ajax :]
      * @param int $length longitud del password
      * @link base_url()/index.php/alumno/get_genPassword 
      */
     public function get_genPassword($length=5) {
         if ($_POST) {
             $length = $_POST["length"];
         } else {
             redirect(base_url());
         }

         $this->load->library("utils/generadorpassword");
         echo $this->generadorpassword->generatePassword($length);

     }




 }

 